package com.example.config;

import com.example.interceptor.JwtInterceptor;
import jakarta.annotation.Resource;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Resource
    private JwtInterceptor jwtInterceptor;

    /**
     * 拦截器和过滤器其实没什么作用，只是负责对前端要访问的对象进行拦截并判断哪些通过，但是如何通过就需要用户自己设定
     * | 问题                             | 解答                                        |
     * | ------------------------------- | ------------------------------------------ |
     * | 过滤器/拦截器默认会拦截请求吗？       |  ❌ 不会，除非你明确配置路径和拦截规则          |
     * | 不写登录判断逻辑会默认验证吗？        |  ❌ 不会，必须你自己写判断逻辑                 |
     * | 不设置就能直接访问接口吗？           |  ✅ 是的，只要接口没被权限系统保护              |
     * | 它们的作用是什么？                 |  ✅ 是你自己控制“请求是否允许继续处理”的机制      |
     * 拦截器/过滤器并不会决定“是否能访问”接口
     * 它只是决定“哪些路径我要处理”
     * 至于处理之后放不放行，要看你写了什么判断逻辑
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(jwtInterceptor)
                // 第一种方式：拦截所有，放行指定接口
                // 拦截所有
                .addPathPatterns("/**")
                // 接口放行
                .excludePathPatterns(
                        "/auth/login"
                );
    }
}
